import axios from 'axios' //网络请求库
import store from '@/store' //状态容器
import { history as historys } from '@/router/history'

import { message } from 'antd'
import { logoutAction } from '@/store/modules/login'

const request = axios.create({
  // 后台基础地址
  //baseURL: 'http://geek.itheima.net/v1_0',
  // 动态：
  // 1. npm start => 读取的是.env.development中的环境变量
  // 2. npm run build => 读取的是.env.production中的环境变量
  baseURL: process.env.REACT_APP_URL,
})

request.interceptors.request.use((config) => {
  //请求拦截
  //请求参数Headers
  const { token } = store.getState().login
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

request.interceptors.response.use(
  //响应拦截器
  (res) => {
    console.log('请求成功200', res)
    return res.data
  },
  (error) => {
    console.dir(error) //打印出该对象的所有属性和属性值
    if (error.response.status === 401) {
      if (historys.location.pathname === '/login') return

      message.error(error.response.data.message) //错误提示

      store.dispatch(logoutAction()) // 清除本地token和用户信息

      //跳回登录页,携带当前页面地址(下次成功登录，可以跳回401的时候访问的页面)
      historys.replace('/login', {
        fromsss: historys.location.pathname, //navigate(lacation.state?.fromsss || '/')
      })
    }

    return Promise.reject(error) //返回一个带有拒绝原因error参数的Promise对象
  }
)
export default request
